home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 4728 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  3.3 KB

  1. Path: redstone.interpath.net!mercury!mccourry
  2. From: mccourry@mercury.interpath.net (Thomas L McCourry -- Personal Account)
  3. Newsgroups: comp.lang.c
  4. Subject: referencing c structures with inline assembly?
  5. Date: 6 Feb 1996 15:37:20 GMT
  6. Organization: Interpath -- Providing Internet access to North Carolina
  7. Message-ID: <4f7sjg$21h@redstone.interpath.net>
  8. NNTP-Posting-Host: mercury.interpath.com
  9. Summary: how do you reference c structures with inline assembly?
  10. Keywords: assembly structure
  11. X-Newsreader: NN version 6.5.0 #4 (NOV)
  12.  
  13.  
  14.  
  15. Can someone tell me how to access parts of this structure using inline
  16. assembly language?
  17.  
  18.  
  19.                  HERE IS A STRUCTURE THAT I'M USING:
  20.  
  21. typedef struct uart {
  22.    int uart_data;                   // Data register 
  23.    int uart_ier;                    // Interrupt enable register 
  24.    int uart_iir;                    // Interrupt identification register 
  25.    int uart_lcr;                    // Line control register 
  26.    int uart_mcr;                    // Modem control register 
  27.    int uart_lsr;                    // Line status register 
  28.    int uart_msr;                    // Modem status register 
  29.  
  30.    char  com_installed;             // Flag: Communications routines installed 
  31.    int   intnum;                    // Interrupt vector number for chosen port
  32.    char  i8259bit;                  // 8259 bit mask 
  33.    char  old_i8259_mask;            // Copy as it was when we were called 
  34.    char  old_ier;                   // Modem register contents saved for 
  35.    char  old_mcr;                   // restoring when we're done 
  36.    void interrupt (*old_vector)();  // Place to save COM1 vector 
  37.  
  38.    unsigned char  *tx_queue;
  39.    int   tx_in;                     // Index of where to store next character
  40.    int   tx_out;
  41.    int   tx_chars;                  // Count of characters in queue
  42.  
  43.    unsigned char  *rx_queue;
  44.    int   rx_in;                     // Index of where to store next character
  45.    int   rx_out;
  46.    int   rx_chars;                  // Count of characters in queue
  47. } Uart;
  48.  
  49.  
  50.            HERE IS PART OF A FUNCTION THAT USES THE STRUCTURE
  51.            --------------------------------------------------
  52.  
  53.  
  54. void com_driver(register Uart *p)  {
  55.    char c;
  56.  
  57.    c = p->i8259bit;
  58.  
  59. asm  {
  60.    in    al,21h
  61.    or    al,[c]               // disarm the interrupt, COM1=10h, COM2=08h
  62.    out   21h,al
  63.    mov   al,20h               // acknowledge interrupt
  64.    out   20h,al
  65. }
  66.  
  67.  
  68.                          HERE IS WHAT I WANT TO DO:
  69.                          --------------------------
  70.  
  71.  
  72. void com_driver(register Uart *p)  {
  73.  
  74. asm  {
  75.    in    al,21h
  76.    or    al,[p->i8259bit]     // disarm the interrupt, COM1=10h, COM2=08h
  77.    out   21h,al
  78.    mov   al,20h               // acknowledge interrupt
  79.    out   20h,al
  80. }
  81.  
  82.  
  83. That is, I would like to acces the structure in assembly language. The second
  84. function doesn't compile. How do you reference this byte in the structure using
  85. only assembly language. I'm using the Borland C/C++ compiler.
  86.  
  87. thanks,
  88.  
  89. Larry McCourry
  90. mccourry@mercury.interpath.com
  91.  
  92. --
  93.  I think I've got the hang of it now .... :w  :q  :wq  :wq! ^d  X exit ^X^C ~.
  94.  ^[x  X Q  :quitbye  CtrlAltDel   ~~q  :~q  logout  save/quit :!QUIT ^[zz ^[ZZ 
  95.  ZZZZ  ^H  ^@  ^L  ^[c  ^# ^E ^X ^I ^T  ?  help  helpquit ^D  ^d ^C ^c help 
  96.  ^]q  exit ?Quit ?q  (stolen from Norm Ahlquist) mccourry@mercury.interpath.com 
  97.